9537. Транспониование матрицы

 

Задана матрица A. Транспонируйте ее.

Пусть B – транспонированная матрица A. Тогда Bij = Aji.

Вход. Первая строка содержит размеры матрицы n и m (1 ≤ n, m ≤ 100). Следующие n строк содержат по m целых чисел и описывают матрицу A.

 

Выход. Выведите транспонированную матрицу A: m строк по n целых чисел.

 

Пример входа

Пример выхода

3 2

1 2

3 4

5 6

1 3 5

2 4 6

 

 

РЕШЕНИЕ

алгебра

 

Анализ алгоритма

По заданной матрице А построим транспонированную B, где Bij = Aji.

 

Реализация алгоритма

Объявим входную матрицу a и транспонированную b.

 

#define MAX 100

int a[MAX][MAX], b[MAX][MAX];

 

Читаем входные данные.

 

scanf("%d %d", &n, &m);

for (i = 0; i < n; i++)

for (j = 0; j < m; j++)

  scanf("%d", &a[i][j]);

 

Строим транспонированную матрицу.

 

for (i = 0; i < n; i++)

for (j = 0; j < m; j++)

  b[j][i] = a[i][j];

 

Выводим транспонированную матрицу.

 

for (i = 0; i < m; i++)

{

  for (j = 0; j < n; j++)

    printf("%d ", b[i][j]);

  printf("\n");

}

 

Реализация алгоритмадвойной указатель

 

#include <stdio.h>

 

int i, j, n, m;

int **a, **b;

 

void Read(int **&matr, int n, int m)

{

  matr = new int*[n];

  for (i = 0; i < n; i++)

  {

    matr[i] = new int[m];

    for (j = 0; j < m; j++)

      scanf("%d", &matr[i][j]);

  }

}

 

int ** Transpose(int ** a, int n, int m)

{

  int **b = new int*[m];

  for (i = 0; i < m; i++)

    b[i] = new int[n];

 

  for (i = 0; i < m; i++)

  for (j = 0; j < n; j++)

    b[i][j] = a[j][i];

 

  return b;

}

 

void Print(int **a, int n, int m)

{

  for (i = 0; i < n; i++)

  {

    for (j = 0; j < m; j++)

      printf("%d ", a[i][j]);

    printf("\n");

  }

}

 

int main(void)

{

  scanf("%d %d", &n, &m);

  Read(a, n, m);

 

  b = Transpose(a, n, m);

  Print(b, m, n);

 

  return 0;

}

 

Реализация алгоритмадвойной указатель + файл

 

#include <stdio.h>

 

int i, j, n, m;

int **a, **b;

FILE *in, *out;

 

void Read(int **&matr, int n, int m)

{

  matr = new int*[n];

  for (i = 0; i < n; i++)

  {

    matr[i] = new int[m];

    for (j = 0; j < m; j++)

      fscanf(in, "%d", &matr[i][j]);

}

}

 

void Transpose(int ** a, int **&b, int n, int m)

{

  b = new int*[m];

  for (i = 0; i < m; i++)

    b[i] = new int[n];

 

  for (i = 0; i < m; i++)

  for (j = 0; j < n; j++)

    b[i][j] = a[j][i];

}

 

void Print(int **a, int n, int m)

{

  for (i = 0; i < n; i++)

  {

    for (j = 0; j < m; j++)

      fprintf(out, "%d ", a[i][j]);

    fprintf(out, "\n");

  }

}

 

int main(void)

{

  in = fopen("input.txt", "r"); // r - read

  out = fopen("output.txt", "w"); // w - write

 

  fscanf(in, "%d %d", &n, &m);

  Read(a, n, m);

 

  Transpose(a, b, n, m);

  Print(b, m, n);

 

  return 0;

}